import { Command } from 'commander'
import { br } from './branches'
import { git } from './git/git'

export function cmList(program: Command) {
    program
        .command('list')
        .alias('l')
        .option('-a, --all', '显示所有分支（包括远程分支）')
        .option('-l, --local', '只显示本地分支')
        .argument('[keywords...]', '过滤分支的关键词（使用空格分割）')
        .description('罗列匹配关键词的分支')
        .action((keywords: string[], opt: { all?: boolean, local?: boolean }) => {
            try {
                let branches: string[] = []
                
                if (opt.all) {
                    // 获取所有分支（包括远程分支）
                    branches = git.getAllBranches()
                } else if (opt.local) {
                    // 只获取本地分支
                    branches = git.getLocalBranches()
                } else {
                    // 默认获取本地分支
                    branches = git.getLocalBranches()
                }
                
                // 去重
                branches = [...new Set(branches)]
                
                // 如果有关键词，进行过滤
                if (keywords && keywords.length > 0) {
                    branches = branches.filter(branch => {
                        // 检查分支名是否包含所有关键词
                        return keywords.every(keyword => 
                            branch.toLowerCase().includes(keyword.toLowerCase())
                        )
                    })
                }
                
                // 获取当前分支
                const currentBranch = br.currentBranch
                
                // 显示结果
                if (branches.length === 0) {
                    if (keywords && keywords.length > 0) {
                        console.log(`没有找到匹配关键词 "${keywords.join(' ')}" 的分支`)
                    } else {
                        console.log('没有找到任何分支')
                    }
                } else {
                    console.log(`找到 ${branches.length} 个匹配的分支：`)
                    console.log('')
                    
                    branches.forEach(branch => {
                        const isCurrent = branch === currentBranch
                        const prefix = isCurrent ? '* ' : '  '
                        const suffix = isCurrent ? ' (当前分支)' : ''
                        console.log(`${prefix}${branch}${suffix}`)
                    })
                }
            } catch (error) {
                console.error('获取分支列表时发生错误:', error)
            }
        })
}